/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.servico;

import br.com.foxinline.modelo.Cidadao;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author ely
 */
@Stateless
public class CidadaoServico extends ServicoGenerico<Cidadao> {

    public CidadaoServico() {
        super(Cidadao.class);
    }

    public List<Cidadao> findCidadao(Cidadao cidadao) {
        String sql = "select c from Cidadao c ";

        sql += " WHERE ";

        if (cidadao.getNome() != null && !cidadao.getNome().equals("")) {
            sql += " lower(c.nome) like lower(:nome) and ";
        }

        if (cidadao.getCpf() != null && !cidadao.getCpf().equals("")) {
            sql += " lower(c.cpf) like lower(:cpf) and ";
        }
        if (cidadao.getNumeroCartaoSus() != null && !cidadao.getNumeroCartaoSus().equals("")) {
            sql += " lower(c.numSus) like lower(:numSus) and ";
        }

        sql += "  1=1 AND c.ativo = TRUE  Order by c.nome ASC ";

        Query query = getEntityManager().createQuery(sql);

        if (cidadao.getNome() != null && !cidadao.getNome().equals("")) {
            query.setParameter("nome", "%" + cidadao.getNome() + "%");
        }

        if (cidadao.getCpf() != null && !cidadao.getCpf().equals("")) {
            query.setParameter("cpf", cidadao.getCpf());
        }

        if (cidadao.getNumeroCartaoSus() != null && !cidadao.getNumeroCartaoSus().equals("")) {
            query.setParameter("numSus", cidadao.getNumeroCartaoSus());
        }

        return query.getResultList();
    }

    /**
     * Verifica se existe um cidadao pelo número do cartão sus
     *
     * @param cidadao
     * @return
     */
    public Cidadao existe(Cidadao cidadao) {
        String sql = "SELECT c FROM Cidadao c ";

        if (cidadao.getNumeroCartaoSus() != null && !cidadao.getNumeroCartaoSus().isEmpty()) {
            sql += "where c.numeroCartaoSus like :numeroCartaoSus";
        }

        Query query = getEntityManager().createQuery(sql);

        if (cidadao.getNumeroCartaoSus() != null && !cidadao.getNumeroCartaoSus().isEmpty()) {
            query.setParameter("numeroCartaoSus", cidadao.getNumeroCartaoSus());
        }

        return (Cidadao) query.getSingleResult();
    }

    public List<Cidadao> pesquisarTodos(Cidadao cidadao) {
        String sql = "SELECT distinct c FROM Cidadao c WHERE ";

        if (cidadao.getNome() != null && !cidadao.getNome().isEmpty()) {
            sql += "LOWER(c.nome) LIKE LOWER(:nome) AND ";
        }

        if (cidadao.getNumeroCartaoSus() != null && !cidadao.getNumeroCartaoSus().isEmpty()) {
            sql += "LOWER(c.numeroCartaoSus) LIKE LOWER(:numeroCartaoSus) AND ";
        }

        if (cidadao.getCpf() != null && !cidadao.getCpf().isEmpty()) {
            sql += "LOWER(c.cpf) LIKE LOWER(:cpf) AND ";
        }

        sql += "1=1";

        Query query = getEntityManager().createQuery(sql);

        if (cidadao.getNome() != null && !cidadao.getNome().isEmpty()) {
            query.setParameter("nome", "%" + cidadao.getNome() + "%");
        }

        if (cidadao.getNumeroCartaoSus() != null && !cidadao.getNumeroCartaoSus().isEmpty()) {
            query.setParameter("numeroCartaoSus", cidadao.getNumeroCartaoSus());
        }

        if (cidadao.getCpf() != null && !cidadao.getCpf().isEmpty()) {
            query.setParameter("cpf", cidadao.getCpf());
        }

        return query.getResultList();
    }
}
